.. _cemIxArc3PStart: cemIxArc3PStart =============== --------------- SYNOPSIS -------- .. code-block:: none VT_I4 cemIxArc3PStart( VT_I4 MapIndex, VT_R8 P2X, VT_R8 P2Y, VT_R8 P3X, VT_R8 P3Y, VT_R8 EndAngle ) DESCRIPTION ----------- - 현재 좌표와 상대적 두 좌표를 매개변수로 하여 원호 보간 이송을 수행합니다. 이때 각 좌표는 상대 좌표로 표현됩니다. - 모션을 시작시킨 후에 바로 반환됩니다. - 원호 보간은 임의의 두 축에 대해서 적용됩니다. 아래 설명에서는 맵핑된 두 축을 X, Y 축으로 간주하여 설명합니다. 여기서 X 축이라 함은 맵핑된 두 축 중에서 축 번호가 낮은 축을 의미하며 Y 축은 축 번호가 높은 축을 의미합니다. 예를 들어 Z 축과 U 축이 맵핑된 두 축이라면 Z 축이 X 축에 해당하며 U 축이 Y 축에 해당합니다. PARAMETER --------- - MapIndex : 맵 번호(Map index). 이 맵 번호를 사용하기 전에 먼저 cemIxMapAxes 함수를 통하여. 해당 맵번호에 유효한 축들이 맵핑 되어 있어야 합니다. - P2X : 현재 위치(시작 위치)로부터 두 번째 점까지 X 축상의 거리를 설정합니다. - P2Y : 현재 위치(시작 위치)로부터 두 번째 점까지 Y 축상의 거리를 설정합니다. - P3X : 두 번째 점부터 세 번째 점까지 X 축상의 거리를 설정합니다. . - P3Y : 두 번째 점부터 세 번째 점까지 Y 축상의 거리를 설정합니다. - EndAngle : 원호 보간 이송을 완료할 목표 지점의 현재 위치에 대한 각도 값을 Degree(°)값으로. 지정합니다. 각도의 부호가 (+)이면 반 시계방향, (-)이면 시계방향으로의 이동을 의미합니다. 단,. EndAngle 값을 ‘0’으로 설정하시면 세번째 점까지 원호 보간 이송을 수행합니다. RETURN VALUE ------------ +----------------+--------------------------------------------------------+ | Value | Meaning | +================+========================================================+ | 음수 | 수행 실패. 자세한 내용은 ‘에러처리’ 편을 참고합니다. | +----------------+--------------------------------------------------------+ | 0 (ceERR_NONE) | 수행 성공. | +----------------+--------------------------------------------------------+ .. note:: cemIxArc3PStart 함수를 사용하는 경우에는 cemIxIsDone 함수나 cemIxWaitDone 함수를 사용 하여 모션의 완료를 확인할 수 있습니다. 스텝 드라이버는 INP 출력이 없는 경우가 일반적인데, 고객님의 부주의나 잘못된 설정으로 INP 입력에 대한 설정이 Enable 로 되어 있을 경우 INP 입력이 스텝 드라이버를 통해 발생하지 않는 이유 때문에 모션 완료가 되지 않는 경우가 발생할 수 있습니다. 고객 여러분들께서는 스텝 드라이버 사용시에 이점을 주의해 주시기를 부탁 드립니다. Example ------- .. code-block:: cpp :linenos: C/C++ #include “ceSDK.h” #include “ceSDKDef.h” long nIxMap = 0; // 보간 맵 설정 long nNodeID = 1; // 해당 원격 노드 ID void OnSetIxConfig () { // 0 번 축과 1 번 축을 보간 맵으로 설정합니다. cemIxMapAxes ( nIxMap, nNodeID, cemX1_MASK | cemY1_MASK, 0 ); // 각 축의 속도를 설정합니다. cemCfgSpeedPattern_Set ( cemX1, cemSMODE_T, 1000, 5000, 5000 ); cemCfgSpeedPattern_Set ( cemY1, cemSMODE_T, 1000, 5000, 5000 ); } void OnIxArc3P_Move () { // 맵에 포함된 축의 속도 비율을 설정합니다. cemIxSpeedPattern_Set ( nIxMap, CE_FALSE, cemSMODE_T, 100, 70, 70 ); double fX2 = 1000.0f, fY2 = 3000.0f; double fX3 = 3000.0f, fY3 = 2000.0f; /* 현재 위치, ( 현재 위치 + fX2, 현재 위치 + fY2 ), ( 현재 위치 + fX3, 현재 위치 + fY3 ) 의 세점을 지나는 원을 그립니다.* / cemIxArc3P ( nIxMap, fX2, fY2, fX3, fY3, 360, CE_FALSE ); // cemIxArc3PStart() 함수를 사용하는 경우에는 다음과 같이 코드를 작성합니다. // cemIxArc3PStart ( nIxMap, fX2, fY2, fX3, fY3, 360 ); // cemIxWaitDone ( nIxMap, CE_FALSE ); }